2023/12/232100字符
迭代器
什么是迭代器?
- 一种设计模式,用于统一迭代过程,并规范了迭代的规格
- 得到下一个数据
- 判断是否还有后续数据
迭代器模拟
const arr = [1, 2, 3, 4, 5];
const iterator = {
i: 0,
// next() 用于得到下一个数据
next () {
let result = {
value: arr[this.i], // value: 下一个数据的值
done: this.i >= arr.length // done: Boolean 是否迭代完成
}
this.i++;
return result;
}
}
迭代器函数
function createIterator (arr) {
let i = 0;
return {
next () {
let result = {
value: arr[i],
done: i >= arr.length
}
i++;
return result;
}
}
}
const arr = [1, 2, 3, 4, 5];
let iter = createIterator(arr);
iter.next(); //--> {value: 1, done: false}
iter.next(); //--> {value: 2, done: false}
iter.next(); //--> {value: 3, done: false}
iter.next(); //--> {value: 4, done: false}
iter.next(); //--> {value: 5, done: false}
iter.next(); //--> {value: undefined, done: false}
斐波纳列数列
function createFeiboIterator () {
let prev1 = 1, // 当前位置的前一位
prev2 = 1, // 当前位置的前二位
n = 1; // 当前是第几位
return {
next () {
let value;
if (n <= 2) {
value = 1;
} else {
value = prev2 + prev1;
}
const result = {
value,
done: false
}
prev2 = prev1;
prev1 = result.value;
n++;
return result;
}
}
}
let iter = createFeiboIterator();
iter.next(); //--> {value: 1, done: false}
iter.next(); //--> {value: 1, done: false}
iter.next(); //--> {value: 2, done: false}
iter.next(); //--> {value: 3, done: false}
iter.next(); //--> {value: 5, done: false}